<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class RequestController extends Controller
{
	//获取Request请求实例
    public function getBasetest(Request $request)
    {
        $input = $request->input('test');
        echo $input;
    }
	
	//获取请求URL路径
	public function getUrl(Request $request)
	{
		//匹配request/*的URL才能继续访问
		if(!$request->is('request/*')){
			abort(404); //异常终止一个进程，然后向调用进程发送该信号
		}
		$uri = $request->path();
		$url = $request->url();
		echo $uri;
		echo '<br>';
		echo $url;
	}
	
	//获取请求方法
	//我们还可以通过调用Request实例上的getMethod方法获取当前请求的方法：
	public function getMethod(Request $request){
		//非get请求不能访问
		if(!$request->isMethod('get')){
			abort(404);
		}
		$method = $request->method();
		echo $method;
	}
	
	//获取请求数据
    //当前请求输入
    //使用Request实例上的input方法即可获取请求输入数据。该方法可以接收两个参数，第一个参数是传递参数名称，第二个参数是如果参数名为空返回的默认值，此外该方法还支持获取数组参数对应值，我们定义测试方法如下：
	public function getInputData(Request $request){
		//获取GET方式传递的name参数，默认为LaravelAcademy
		$name = $request->input('name','LaravelAcademy');
		echo $name;
		echo '<br>';
		echo $request->input('test.0.name');
		
		//如果我们想要在获取输入值之前判断输入参数名是否存在，可以使用has方法，比如我们想要判断输入参数是否包含hello，可使用如下方法：

		//if($request->has('hello'))
			//echo $request->input('hello');

	}
	
	
	/*想要获取所有输入参数值，可以使用Request实例上的all方法；想要获取部分输入值，可使用only方法；想要排除部分输入参数值，可使用except方法：

	public function getInputData(Request $request){

		$allData = $request->all();
		$onlyData = $request->only('name','hello');
		$exceptData = $request->except('hello');

		echo '<pre>';
		print_r($allData);
		print_r($onlyData);
		print_r($exceptData);
	}*/

	//3.2获取上一次请求输入：http://laravelacademy.org/post/606.html
	
	
	
	//4、获取Cookie数据

	/*我们可以使用Request实例上的cookie方法获取cookie数据，该方法可以接收一个参数名返回对应的cookie值，如果不传入参数，默认返回所有cookie值：

	public function getCookie(Request $request){
		$cookies = $request->cookie();
		dd($cookies);
	}*/
	
	
		//我们可以调用Response实例上的withCookie方法新增cookie：

	public function getAddCookie(){
		$response = new Response();
		//第一个参数是cookie名，第二个参数是cookie值，第三个参数是有效期（分钟）
		$response->withCookie(cookie('website','LaravelAcademy.org',1));
		//如果想要cookie长期有效使用如下方法
		//$response->withCookie(cookie()->forever('name', 'value'));
		return $response;
	}

	//我们重新定义getCookie方法如下：

	public function getCookie(Request $request){

		$cookie = $request->cookie('website');
		echo $cookie;
	}
	
		//5、上传文件

	//我们定义文件上传页面及上传处理如下：

	//文件上传表单
	public function getFileupload()
	{
		$postUrl = 'fileupload';
		$csrf_field = csrf_field();
		$html = <<<CREATE
	<form action="$postUrl" method="POST" enctype="multipart/form-data">
	$csrf_field
	<input type="file" name="file"><br/><br/>
	<input type="submit" value="提交"/>
	</form>
CREATE;
		return $html;
	}

	//文件上传处理
	public function postFileupload(Request $request){
		header("Content-type:text/html;charset=utf-8");
		//判断请求中是否包含name=file的上传文件
		if(!$request->hasFile('file')){
			exit('上传文件为空！');
		}
		$file = $request->file('file');
		//判断文件上传过程中是否出错
		if(!$file->isValid()){
			exit('文件上传出错！');
		}
		
		// realpath（）是判断路径是否存在的
		//$isexit = realpath(public_path('images'));
		//$desPath = public_path('images');
		//if(!$isexit){
			//mkdir($desPath);
		
		$destPath = './images';
		if(!file_exists($destPath))
			mkdir($destPath,0755,true);
		$filename = $file->getClientOriginalName();
		if(!$file->move($destPath,$filename)){
			exit('保存文件失败！');
		}
		exit('文件上传成功！');
	}





}